const path = require("path");
const fs = require("fs");
const user = require("../../database/user");

module.exports = (req,res,next)=>{
  const {userId} = req.body;
  // 如果前端发送了文件，在req身上会被添加一个files属性，内为本次接收到的文件信息，数组形式，数组内是对象，对象的属性有
    // 请求过程中文件信息的字段名："fieldname": "abc",
    // 上传之前的文件名"originalname": "avatar2.jpg",
    // 编码格式："encoding": "7bit",
    // 媒体类型："mimetype": "image/jpeg",
    // 上传到服务器内的文件夹："destination": "./upload",
    // 上传到服务器后的文件名："filename": "6261fb0197a2e00997eed9646f06a22c",
    // 上传到服务器后的路径："path": "upload/6261fb0197a2e00997eed9646f06a22c",
    // 大小："size": 6868

  // 因为服务器生成的文件没有扩展名，且文件名为随机名
  // 为了语义化，及正常查看文件
  // 添加上传之前的文件名及扩展名到服务器介绍的文件中

  // 从当前服务器上找到要改名的文件：oldname
  const oldName = path.join(__dirname, "..", "..", req.files[0].path);
  // 修改成：现文件名-上传之前名.扩展名的形式
  const newName = oldName + "-" + req.files[0].originalname;

  // 使用fs的改名方法，进行改名
  fs.rename(oldName, newName, async ()=>{
    // 虽然上传到服务器了，但是前端拿不到该文件
    // 将该文件的地址，拼接成服务器中的静态资源地址，响应给前端，及存入数据库
    const resUrl = "http://localhost:3000/" + newName.split(/upload(?:\/|\\)/)[1];
    // 注意：不同操作系统中路径的斜杠方向
    
    try {
      // 修改数据库信息
      await user.updateOne({userId}, {avatar: resUrl});
      // 响应给前端
      res.send({
        code:1,
        msg:"修改成功",
        avatarUrl: resUrl
      })
    } catch (error) {
      res.send({
        code:0,
        msg:"修改失败",
        avatarUrl: ""
      })
    }
  })
}